home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / optivc32 / vfstd.h < prev    next >
C/C++ Source or Header  |  1999-03-06  |  14KB  |  304 lines

  1. /*  VFstd.h
  2.  
  3.   vector management functions:
  4.   manipulations on whole arrays or vectors of data type "float"
  5.   (real numbers)
  6.  
  7.   Copyright (c) 1996-1999 by Martin Sander
  8.   All Rights Reserved.
  9. */
  10.  
  11. #ifndef __VFSTD_H
  12. #define __VFSTD_H
  13. #if !defined( __VECLIB_H )
  14. #include <VecLib.h>
  15. #endif
  16.  
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20.  
  21. /*************************  Generation  **************************/
  22.  
  23. fVector   __vf  VF_vector( ui size );
  24. fVector   __vf  VF_vector0( ui size );
  25.  
  26. /***************  Addressing single vector elements ******************/
  27.  
  28. float _VFAR * VF_Pelement( fVector X, ui n );
  29.       /* returns a pointer to the n'th element of X. For the memory model
  30.          HUGE, the pointer is normalized. */
  31. #define VF_element( X, n )  (*VF_Pelement( X, n ))
  32.  
  33. /*******************  Initialization **********************************/
  34.  
  35. void  __vf  VF_equ0( fVector X, ui size );
  36. void  __vf  VF_equ1( fVector X, ui size );
  37. void  __vf  VF_equC( fVector X, ui size, float C );
  38. void  __vf  VF_equV( fVector Y, fVector X, ui size );
  39. void  __vf  VFx_equV( fVector Y, fVector X, ui size, float A, float B );
  40. void  __vf  VF_ramp( fVector X, ui size, float Start, float Rise );
  41. void  __vf  VF_Parzen( fVector X, ui size );
  42. void  __vf  VF_Welch( fVector X, ui size );
  43. void  __vf  VF_Hanning( fVector X, ui size );
  44. void  __vf  VF_comb( fVector X, ui size, unsigned step, float C );
  45. long  __vf  VF_random( fVector X, ui size, long seed,
  46.                        float MinVal, float MaxVal );
  47. long  __vf  VF_noise( fVector X, ui size, long seed, float Amp );
  48.             /* VF_random and VF_noise return a new seed value.
  49.                random quality of VF_random is much better      */
  50.  
  51. /***************  Data-type interconversions  *************************/
  52.        /* for rounding functions, see VFmath.h ! */
  53.  
  54. void  __vf   V_SItoF(  fVector Y, siVector X, ui size );
  55. void  __vf   V_ItoF(   fVector Y, iVector  X, ui size );
  56. void  __vf   V_LItoF(  fVector Y, liVector X, ui size );
  57. void  __vf   V_QItoF(  fVector Y, qiVector X, ui size );
  58.  
  59. void  __vf   V_UStoF(  fVector Y, usVector X, ui size );
  60. void  __vf   V_UtoF(   fVector Y, uVector  X, ui size );
  61. void  __vf   V_ULtoF(  fVector Y, ulVector X, ui size );
  62.  
  63. void  __vf   V_FtoD( dVector Y, fVector X, ui size );
  64. void  __vf   V_DtoF( fVector Y, dVector X, ui size );
  65. #ifdef __BORLANDC__   /* 80-bit IEEE numbers supported */
  66.     void  __vf   V_FtoE( eVector Y, fVector X, ui size );
  67.     void  __vf   V_EtoF( fVector Y, eVector X, ui size );
  68. #else  /* no IEEE number support with Visual C++ */
  69.     #define V_FtoE V_FtoD
  70.     #define V_EtoF V_DtoF
  71. #endif
  72.  
  73.  
  74. /****************  Index-oriented manipulations ***********************/
  75.  
  76. void  __vf  VF_reflect( fVector X, ui size );
  77. void  __vf  VF_rev( fVector Y, fVector X, ui size );
  78. #if defined (V_HUGE)
  79.     void  __vf  VF_rotate( fVector Y, fVector X, ui size, long pos );
  80. #else
  81.     void  __vf  VF_rotate( fVector Y, fVector X, ui size, int pos );
  82. #endif
  83. void  __vf  VF_delete( fVector X, ui size, ui pos );
  84. void  __vf  VF_insert( fVector X, ui size, ui pos, float C );
  85. void  __vf  VF_sort( fVector Y, fVector X, ui size, int dir );
  86. void  __vf  VF_sortind( uiVector Ind, fVector X, ui size, int dir );
  87. void  __vf  VF_subvector( fVector Y, ui sizey, fVector X, int samp );
  88. void  __vf  VF_indpick( fVector Y, uiVector Ind, ui sizey, fVector X );
  89. void  __vf  VF_indput(  fVector Y, fVector X, uiVector Ind, ui sizex );
  90. ui    __vf  VF_searchC( fVector X, ui size, float C, int mode );
  91. void  __vf  VF_searchV( uiVector Ind, fVector X, ui sizex,
  92.                                      fVector Tab, ui sizetab, int mode );
  93.  
  94. void  __vf  VF_polyinterpol( fVector Y, fVector X, ui sizex,
  95.                         fVector XTab, fVector YTab, ui sizetab, unsigned deg );
  96. void  __vf  VF_ratinterpol( fVector Y, fVector X, ui sizex,
  97.                         fVector XTab, fVector YTab, ui sizetab, unsigned deg );
  98. void  __vf  VF_splinederiv2( fVector Y2, fVector XTab, fVector YTab,
  99.                             ui tabsize, int specify, float Yp0, float Ypn );
  100. void  __vf  VF_splineinterpol( fVector Y, fVector X, ui sizex,
  101.                     fVector XTab, fVector YTab, fVector Y2Tab, ui sizetab );
  102.  
  103.  
  104. /***************** Functions of a sub-set of elements  ********************/
  105.  
  106. void  __vf  VF_subvector_equC(  fVector Y, ui subsiz, unsigned samp, float C );
  107. void  __vf  VF_subvector_equV(  fVector Y, ui subsiz, unsigned samp, fVector X );
  108.      /*  for arithmetic functions performed on subvectors, see <VFmath.h> */
  109.  
  110.  
  111. /**************** One-Dimensional Vector Operations ***********************/
  112.  
  113. float      __vf  VF_max( fVector X, ui size );
  114. float      __vf  VF_min( fVector X, ui size );
  115. float      __vf  VF_absmax( fVector X, ui size );
  116. float      __vf  VF_absmin( fVector X, ui size );
  117. int        __vf  VF_maxexp( fVector X, ui size );
  118. int        __vf  VF_minexp( fVector X, ui size );
  119. float      __vf  VF_maxind( ui _VFAR *Ind, fVector X, ui size );
  120. float      __vf  VF_minind( ui _VFAR *Ind, fVector X, ui size );
  121. float      __vf  VF_absmaxind( ui _VFAR *Ind, fVector X, ui size );
  122. float      __vf  VF_absminind( ui _VFAR *Ind, fVector X, ui size );
  123. ui         __vf  VF_localmaxima( uiVector Ind, fVector X, ui size );
  124. ui         __vf  VF_localminima( uiVector Ind, fVector X, ui size );
  125. void       __vf  VF_runmax( fVector Y, fVector X, ui size );
  126. void       __vf  VF_runmin( fVector Y, fVector X, ui size );
  127. float      __vf  VF_sum( fVector X, ui size );
  128. float      __vf  VF_prod( fVector X, ui size );
  129. void       __vf  VF_runsum( fVector Y, fVector X, ui size );
  130. void       __vf  VF_runprod( fVector Y, fVector X, ui size );
  131. int        __vf  VF_iselementC( fVector Tab, ui size, float C );
  132. ui         __vf  VF_iselementV( fVector Y, fVector X, ui sizex,
  133.                                 fVector Tab, ui sizetab );
  134.  
  135.  
  136. /**************** Statistical Functions and Building Blocks *************/
  137.  
  138. float   __vf  VF_mean( fVector X, ui size );
  139. float   __vf  VF_meanwW( fVector X, fVector Wt, ui size );
  140. float   __vf  VF_sumabs( fVector X, ui size );
  141. float   __vf  VF_meanabs( fVector X, ui size );
  142. float   __vf  VF_selected_mean( ui _VFAR *nsel, fVector X, ui size,
  143.                  float XMin, float XMax ); /* takes only x with Min<=x<=Max */
  144. float   __vf  VF_median( fVector X, ui size );
  145. float   __vf  VF_sumdevC( fVector X, ui size, float C );
  146. float   __vf  VF_sumdevV( fVector X, fVector Y, ui size );
  147. float   __vf  VF_avdevC( fVector X, ui size, float C );
  148. float   __vf  VF_avdevV( fVector X, fVector Y, ui size );
  149. float   __vf  VF_ssq( fVector X, ui size );  /* sum-of-squares */
  150. float   __vf  VF_rms( fVector X, ui size );  /* root of the mean square */
  151. float   __vf  VF_ssqdevC( fVector X, ui size, float C );
  152. float   __vf  VF_ssqdevV( fVector X, fVector Y, ui size );
  153. float   __vf  VF_meanvar(  float  _VFAR *Var, fVector X, ui size );
  154. float   __vf  VF_meanvarwW(  float  _VFAR *Var, fVector X, fVector Wt, ui size );
  155. float   __vf  VF_varianceC( fVector X, ui size, float C );
  156. float   __vf  VF_varianceV( fVector X, fVector Y, ui size );
  157. float   __vf  VF_varianceCwW( fVector X, fVector Wt, ui size, float C );
  158. float   __vf  VF_varianceVwW( fVector X, fVector Y, fVector Wt, ui size );
  159. float   __vf  VF_chi2( fVector X, fVector Y, fVector InvVar, ui size );
  160. float   __vf  VF_chiabs( fVector X, fVector Y, fVector Wt, ui size );
  161. float   __vf  VF_corrcoeff( fVector X, fVector Y, ui size,
  162.                             float Xmean, float Ymean );
  163. ui      __vf  VF_distribution( uiVector Abund, fVector Limits, ui nbins,
  164.                                fVector X, ui sizex, int mode );
  165.  
  166. void  __vf  VF_linregress( fVector Param, fVector X, fVector Y, ui size );
  167. void  __vf  VF_linregresswW( fVector Param, fVector X, fVector Y,
  168.                              fVector InvVar, ui size );
  169.      /* more linear and nonlinear data fitting routines need MatrixLib
  170.         and are declared in <MFstd.h> !                                */
  171.  
  172.  
  173. /*********  Fourier Transforms, Convolutions, Filtering  ****************/
  174.  
  175. #if defined __cplusplus && defi